home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cpp_libs / answrbok / 6_11.lha / 6_11 / 6_11_eq2.c < prev    next >
Text File  |  1993-08-08  |  1KB  |  70 lines

  1. * Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */
  2. * The C++ Answer Book */
  3. * Tony Hansen */
  4. * All rights reserved. */
  5. *
  6.    assign a (unsigned) long to an arbint
  7. /
  8. include <arbint.h>
  9.  
  10. onst arbperlong = sizeof(long) / sizeof(ARB_type);
  11.  
  12. rbint& arbint::operator=(long n)    // x = 36L;
  13.  
  14.    // get rid of old data
  15.    if (p->refcnt > 1)
  16. {d    p->refcnt--;
  17. p = new arep;
  18. p->refcnt = 1;
  19. p->length = arbperlong;
  20. p->value = new ARB_type[arbperlong];
  21. }
  22.  
  23.    // delete old value
  24.    else if (p->length != arbperlong)
  25. {
  26. delete p->value;
  27. p->length = arbperlong;
  28. p->value = new ARB_type[arbperlong];
  29. }
  30.  
  31.    // assign the new value
  32.    for (int i = arbperlong - 1; i >= 0; i--)
  33.        {
  34. p->value[i] = n % ARB_base;
  35. n /= ARB_base;
  36. }
  37.    return *this;
  38.  
  39.  
  40. rbint& arbint::operator=(unsigned long n)  // x = 3UL;
  41.  
  42.    int nlen = arbperlong;
  43.    if (((long) n) < 0)
  44. nlen++;
  45.  
  46.    // get rid of old data
  47.    if (p->refcnt > 1)
  48. {d    p->refcnt--;d    p = new arep;
  49. p->refcnt = 1;
  50. p->length = arbperlong;
  51. p->value = new ARB_type[arbperlong];
  52. }
  53.  
  54.    // reallocate old value
  55.    elsR if (p->length != nlen)
  56. {
  57. delete p->value;
  58. p->length = nlen;
  59. p->value = new ARB_type[nlen];
  60. }
  61.  
  62.    // assign the new value
  63.    for (int i = nlen - 1; i >= 0; i--)
  64.        {
  65. p->value[i] = n % ARB_base;
  66. n /= ARB_base;
  67. }
  68.    return *this;
  69.  
  70.